#ifndef SET_H
#define SET_H

#include <QWidget>
#include <QDebug>
#include <QUdpSocket>
#include <QTcpSocket>

#include <QTextStream> // 文本流类
#include <QMessageBox>
#include <Qstring>
#include <QPoint>

#include <QJsonDocument>
#include <QJsonValue>
#include <QJsonObject>
#include <QByteArray>

#include <QFile>
#include <QDataStream>
#include <QFileInfo>
#include <QFileDialog>

#include <QTimer>
#include <QThread>
#include <QString>


#include "mqtt/qmqtt.h"
#include "globalval.h"
#include "mqtthandler.h"

#include "shebei.h"


namespace Ui {
class set;
}

class set : public QWidget
{
    Q_OBJECT

public:
    explicit set(QWidget *parent = 0);
    ~set();
    MqttHandler *mqtt;
    QString topic;


private:
    Ui::set *ui;
    QTimer *timer;  // 定时器对象


//    QString mqttAddr;  // mqtt服务器IP地址
//    int mqttPort;  // mqtt服务器端口

//    QString videoAddr;   // 监控服务器IP地址
//    int videoPort;   // 监控服务端口号

    QUdpSocket* udpSocket;  // udp套接字

    QTcpSocket* tcp_beat_socket;  // 心跳包套接字
    QTcpSocket* tcp_point_socket;  // tcp发送文件套接字

    // udp广播发送地址与端口
    QHostAddress udp_search_addrees;
    int udp_search_Port;

    // tcp接收返回的地址与端口
    QHostAddress tcp_address;
    quint16 tcp_Port;

    QByteArray qoint_data;  // tcp接收点表询问的数据
    QByteArray beat_data;   // 心跳检测接收的数据
    QString readPath = ":/new/prefix1/point_data.json";  // 点表文件路径

    void point_connect();   // 进行发送点表的端口连接
    void tcp_qoint_data();  // 点表状态询问
    void qoint_type_data();  // 点表发送前通知
    void qoint_send_data();  // 点表数据发送函数


signals:
    void mqtt_connect();   // 进行mqtt连接的信号


private slots:
    void pushButton_Search_Click();  // 搜索按钮槽的函数
    void pushButton_Connect_Click();  // 连接按钮槽的函数
    void pushButton_Disconnect_Click();  // 断开连接按钮的槽函数

    void Connected_OK_Slot();// 连接成功之后响应的槽函数
    void Connected_beat_Slot();// 心跳连接成功之后响应的槽函数

    void Dis_Connected_Slot();// tcp下发连接断开之后响应的的槽函数
    void Beatdis_Connected_Slot();// 心跳检测断开连接之后响应的的槽函数

    void tcp_Headbeat_Slot();  // 心跳包槽函数

    void udp_recv_data();   // udp接收消息槽函数
    void tcp_recv_data();   // tcp接收消息槽函数

    void System_Change_Slot(QString);  // 上报模式切换槽函数

    void mqtt_Connect();  // 进行mqtt连接的槽函数

//    void mqtt_Connected_OK_Slot(); // 连接mqtt服务器成功响应的槽函数

};

#endif // SET_H
